A partir des fichiers, lemmatisés et étiquetés, obtenus grâce aux BàO précédentes, le but est d'extraire des patrons de formes grammaticales qui se suivent : Nom Verbe Nom par exemple, ou Adj Nom. Pour obtenir quelque chose qui ressemble à ceci :
Ou à ce que l'on obtient en cliquant sur les liens ci-dessus.
Et ce,
- soit sur les sorties Cordial brutes ;
- Soit sur les sorties XML étiquetées par Tree-tagger à l'aide de la fonction ;
- Soit sur les sorties XML étiquetées par Tree-tagger par une requête XPath couplée avec une feuille de style XSLT.
À l'aide de la feuille de style xsl, qui utilise des variables et des tests pour savoir si les frères précédents et/ou suivants sont de la bonne catégorie grammaticale :
<xsl:template match="article">
<xsl:for-each select="element">
<xsl:if test="(./data[contains(text(),'NOM')])">
<xsl:variable name="nom" select="./data[3]/text()"/>
<xsl:if test="following-sibling::element[1][contains(.,'VER')]">
<xsl:variable name="verbe" select="following-sibling::element[1]/data[3]/text()"/>
<xsl:if test="following-sibling::element[2][contains(.,'NOM')]">
<xsl:variable name="nom2" select="following-sibling::element[2]/data[3]/text()"/>
<font color="#E42217"><xsl:value-of select="$nom"/></font><xsl:text>
</xsl:text><font color="#00A7B1"><xsl:value-of select="$verbe"/>
<xsl:text> </xsl:text><font color="#E42217"><xsl:value-of select="$nom2"/></font></font>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>
XPATH est le moyen de rechercher des informations dans un arbre XML.
La syntaxe est simple : axe (following-sibling - vers la droite ; preceding-sibling - vers la gauche ; ou child - vers le bas)::test (element à chercher) [prédicat].
Il est possible de tester en grandeur nature à l'aide de modules Firefox, xpathchecker, par exemple.
La syntaxe est un peu la même que l'arborescence UNIX, en résumé :
- /élément racine : chemin absolu
- sans rien : chemin relatif à partir du nœud où l'on se trouve
- . désigne le nœud courant
- .. sélectionne le nœud père du nœud courant
- //NOM : tous les nœuds appelés NOM à partir de la racine
- .//NOM, ne cherche NOM QUE dans les enfants du nœud courant
- * tous les fils du nœud courant
- @type renvoie la valeur de l'attribut
- Opérateurs : AND et |.
Les noms des fonctions sont à trouver dans W3Schools : il y a par exemple [contains (text()],'txt à chercher'), text().
Par ex. pour chercher tous les items contenant Obama dans le titre ou la description, cela donne :
//item[((./titre[following-sibling::*[1]contains(text(),'Obama')]]) and (./description[preceding-sibling::*[1]contains[tetx(), 'Obama')]]))]/child:*/text()
Autre exemple ; pour avoir tous les titres dont la description contient Bagdad :
//titreTOUSLESTITRES[following-siblingFONCTIONADROITE::AXE*TOUS LES NOEUDS[1]PRENDLE PREMIER[contains(text(),'Bagdad')]CONTENANTLEMOT]